/**
 * Realizar un programa que cree un array dinámico de estructuras para almacenar
 * los datos de los alumnos de una clase.
 */
#include <stdio.h>
#include <stdlib.h>

//Estructura para definir los datos del alumno
typedef struct {
	char *pnombre;
	float nota;
} Alumno;

//Listado de funciones que se utilizarán
Alumno* introducirAlumnos(int numAlumnos);
void imprimirAlumnos(int numAlumnos, Alumno* alumnos);
Alumno addAlumno();

//Main
int main(void) {
	int numAlumnos;
	Alumno *alumnos;
	//Pedir al usuario el número de alumnos que desea ingresar
	puts("Introduzca número: ");
	scanf("%d", &numAlumnos);
	fflush(stdin);
	//Insertar Alumnos
	alumnos = introducirAlumnos(numAlumnos);
	//Imprimir Alumnos
	imprimirAlumnos(numAlumnos, alumnos);
	//Liberar memoria
	free(alumnos);
	return EXIT_SUCCESS;
}

/**
 * Método que imprime a los los alumnos de un array dinamico
 * @param numAlumnos de int, alumnos de Alumnos*
 */
void imprimirAlumnos(int numAlumnos, Alumno* alumnos) {
	int i;
	puts("***************Listado de alumnos***************");
	for (i = 0; i < numAlumnos; i++) {
		printf("Alumno %d\nNombre: %s\nNota: %0.2f\n", (i + 1),
				alumnos[i].pnombre, alumnos[i].nota);
	}
}

/**
 * Funcion que utilizamos para introducir por pantalla los datos de los alumnos
 * param numAlumnos
 * return *alumnos;
 */
Alumno* introducirAlumnos(int numAlumnos) {
	int i;
	Alumno* alumnos = (Alumno*) malloc(numAlumnos * sizeof(Alumno));
	puts("Introduzca los alumnos");
	for (i = 0; i < numAlumnos; i++) {
		fflush(stdin);
		printf("Alumno %d\n", (i + 1));
		Alumno alumno = addAlumno();
		alumnos[i].pnombre = alumno.pnombre;
		alumnos[i].nota = alumno.nota;
		free(alumno.pnombre);
	}
	return alumnos;
}

/**
 *Funcion que utilizaremos para introducir los datos de un alumno tanto su nombre como su nota
 * @param none
 * @return alumno;
 */
Alumno addAlumno() {
	Alumno alumno;
	alumno.pnombre = (char*) calloc(50, sizeof(char));
	puts("Introduzca  nombre: ");
	scanf("%s", alumno.pnombre);
	puts("Introduzca nota: ");
	scanf("%f", &alumno.nota);
	return alumno;
}

